<!DOCTYPE html>
<html>

<head>
  <title>Quarkus - Amazon Lambda with RESTEasy, Undertow, or Vert.x Web </title>
  <script id="adobe_dtm" src="https://www.redhat.com/dtm.js" type="text/javascript"></script>
  <script src="/assets/javascript/highlight.pack.js" type="text/javascript"></script>
  <META HTTP-EQUIV='Content-Security-Policy' CONTENT="default-src 'none'; script-src 'self' 'unsafe-eval' 'sha256-ANpuoVzuSex6VhqpYgsG25OHWVA1I+F6aGU04LoI+5s=' 'sha256-ipy9P/3rZZW06mTLAR0EnXvxSNcnfSDPLDuh3kzbB1w=' js.bizographics.com https://www.redhat.com assets.adobedtm.com jsonip.com https://ajax.googleapis.com https://www.googletagmanager.com https://www.google-analytics.com https://use.fontawesome.com; style-src 'self' https://fonts.googleapis.com https://use.fontawesome.com; img-src 'self' *; media-src 'self' ; frame-src https://www.googletagmanager.com https://www.youtube.com; frame-ancestors 'none'; base-uri 'none'; object-src 'none'; form-action 'none'; font-src 'self' https://use.fontawesome.com https://fonts.gstatic.com;">
  <META HTTP-EQUIV='X-Frame-Options' CONTENT="DENY">
  <META HTTP-EQUIV='X-XSS-Protection' CONTENT="1; mode=block">
  <META HTTP-EQUIV='X-Content-Type-Options' CONTENT="nosniff">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="Quarkus: Supersonic Subatomic Java">
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:site" content="@QuarkusIO"> 
  <meta name="twitter:creator" content="@QuarkusIO">
  <meta property="og:url" content="https://quarkus.io/guides/amazon-lambda-http" />
  <meta property="og:title" content="Quarkus - Amazon Lambda with RESTEasy, Undertow, or Vert.x Web " />
  <meta property="og:description" content="Quarkus: Supersonic Subatomic Java" />
  <meta property="og:image" content="/assets/images/quarkus_card.png" />
  <link rel="canonical" href="https://quarkus.io/guides/amazon-lambda-http">
  <link rel="shortcut icon" type="image/png" href="/favicon.ico" >
  <link rel="stylesheet" href="https://quarkus.io/guides/stylesheet/config.css" />
  <link rel="stylesheet" href="/assets/css/main.css" />
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
  <link rel="alternate" type="application/rss+xml"  href="https://quarkus.io/feed.xml" title="Quarkus">
  <script src="https://quarkus.io/assets/javascript/goan.js" type="text/javascript"></script>
  <script src="https://quarkus.io/assets/javascript/hl.js" type="text/javascript"></script>
</head>

<body class="guides">
  <!-- Google Tag Manager (noscript) -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NJWS5L"
  height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <!-- End Google Tag Manager (noscript) -->

  <div class="nav-wrapper">
  <div class="grid-wrapper">
    <div class="width-12-12">
      <input type="checkbox" id="checkbox" />
      <nav id="main-nav" class="main-nav">
  <div class="container">
    <div class="logo-wrapper">
      
        <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_600px_reverse.png" class="project-logo" title="Quarkus"></a>
      
    </div>
    <label class="nav-toggle" for="checkbox">
      <i class="fa fa-bars"></i>
    </label>
    <div id="menu" class="menu">
      <span>
        <a href="/get-started/" class="">Get Started</a>
      </span>
      <span>
        <a href="/guides/" class="active">Guides</a>
      </span>
      <span>
        <a href="/community/" class="">Community</a>
      </span>
      <span>
        <a href="/support/" class="">Support</a>
      </span>
      <span>
        <a href="/blog/" class="">Blog</a>
      </span>
      <span>
        <a href="https://code.quarkus.io" class="button-cta secondary white">Start Coding</a>
      </span>
    </div>
  </div>
      </nav>
    </div>
  </div>
</div>

  <div class="content">
    <div class="guide">
  <div class="width-12-12">
    <h1 class="text-caps">Quarkus - Amazon Lambda with RESTEasy, Undertow, or Vert.x Web </h1>
    <div class="hide-mobile toc"><ul class="sectlevel1">
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#getting-started">Getting Started</a></li>
<li><a href="#installing-aws-bits">Installing AWS bits</a></li>
<li><a href="#creating-the-maven-deployment-project">Creating the Maven Deployment Project</a></li>
<li><a href="#build-and-deploy">Build and Deploy</a></li>
<li><a href="#extra-build-generated-files">Extra Build Generated Files</a></li>
<li><a href="#simulate-amazon-lambda-deployment">Simulate Amazon Lambda Deployment</a></li>
<li><a href="#deploy-to-aws">Deploy to AWS</a>
<ul class="sectlevel2">
<li><a href="#package-your-deployment">Package your deployment.</a></li>
<li><a href="#deploy-your-package">Deploy your package</a></li>
<li><a href="#debugging-aws-deployment-problems">Debugging AWS Deployment Problems</a></li>
</ul>
</li>
<li><a href="#execute-your-rest-lambda-on-aws">Execute your REST Lambda on AWS</a></li>
<li><a href="#examine-the-pom">Examine the POM</a>
<ul class="sectlevel2">
<li><a href="#examine-sam-yaml">Examine sam.yaml</a></li>
</ul>
</li>
<li><a href="#tracing-with-aws-xray-and-graalvm">Tracing with AWS XRay and GraalVM</a></li>
</ul></div>
    <div>
      <div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>The <code>quarkus-amazon-lambda-http</code> extension allows you to write microservices with RESTEasy (JAX-RS),
Undertow (servlet), Vert.x Web, or <a href="funqy-http">Funqy HTTP</a> and make these microservices deployable as an Amazon Lambda
using <a href="https://aws.amazon.com/api-gateway/">Amazon&#8217;s API Gateway</a> and <a href="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html">Amazon&#8217;s SAM framework</a>.</p>
</div>
<div class="paragraph">
<p>You can deploy your Lambda as a pure Java jar, or you can compile your project to a native image and deploy that for a smaller
memory footprint and startup time.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>This technology is considered preview.</p>
</div>
<div class="paragraph">
<p>In <em>preview</em>, backward compatibility and presence in the ecosystem is not guaranteed.
Specific improvements might require to change configuration or APIs and plans to become <em>stable</em> are under way.
Feedback is welcome on our <a href="https://groups.google.com/d/forum/quarkus-dev">mailing list</a> or as issues in our <a href="https://github.com/quarkusio/quarkus/issues">GitHub issue tracker</a>.</p>
</div>
<div class="paragraph">
<p>For a full list of possible extension statuses, check our <a href="https://quarkus.io/faq/#extension-status">FAQ entry</a>.</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="prerequisites"><a class="anchor" href="#prerequisites"></a>Prerequisites</h2>
<div class="sectionbody">
<div class="paragraph">
<p>To complete this guide, you need:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>less than 30 minutes</p>
</li>
<li>
<p>JDK 11 (AWS requires JDK 1.8 or 11)</p>
</li>
<li>
<p>Apache Maven 3.6.2+</p>
</li>
<li>
<p><a href="https://aws.amazon.com">An Amazon AWS account</a></p>
</li>
<li>
<p><a href="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html">AWS SAM CLI</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="getting-started"><a class="anchor" href="#getting-started"></a>Getting Started</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This guide walks you through generating an example Java project via a maven archetype.  Later on it walks through the structure
of the project so you can adapt any existing projects you have to use Amazon Lambda.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="installing-aws-bits"><a class="anchor" href="#installing-aws-bits"></a>Installing AWS bits</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Installing all the AWS bits is probably the most difficult thing about this guide.  Make sure that you follow all the steps
for installing AWS SAM CLI.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="creating-the-maven-deployment-project"><a class="anchor" href="#creating-the-maven-deployment-project"></a>Creating the Maven Deployment Project</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Create the Quarkus AWS Lambda maven project using our Maven Archetype.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">mvn archetype:generate \
       -DarchetypeGroupId=io.quarkus \
       -DarchetypeArtifactId=quarkus-amazon-lambda-http-archetype \
       -DarchetypeVersion=1.7.0.Final</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="build-and-deploy"><a class="anchor" href="#build-and-deploy"></a>Build and Deploy</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Build the project using maven.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">./mvnw clean install</code></pre>
</div>
</div>
<div class="paragraph">
<p>This will compile the code and run the unit tests included within the generated project.
Unit testing is the same as any other Java project and does not require running on Amazon.  Quarkus dev-mode is also
available with this extension.</p>
</div>
<div class="paragraph">
<p>If you want to build for native too, make sure you have GraalVM installed correctly and just add a <code>native</code> property
to the build</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">./mvnw clean install -Dnative</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
If you are building on a non-Linux system, you will need to also pass in a property instructing quarkus to use a docker build as Amazon
Lambda requires linux binaries.  You can do this by passing this property to your Maven build:
<code>-Dnative-image.docker-build=true</code>, or for Gradle: <code>--docker-build=true</code>.  This requires you to have docker installed locally, however.
</td>
</tr>
</table>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">./mvnw clean install -Dnative -Dnative-image.docker-build=true</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="extra-build-generated-files"><a class="anchor" href="#extra-build-generated-files"></a>Extra Build Generated Files</h2>
<div class="sectionbody">
<div class="paragraph">
<p>After you run the build, there are a few extra files generated by the <code>quarkus-amazon-lambda</code> extension.  These files
are in the the build directory:  <code>target/</code> for maven, <code>build/</code> for gradle.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>function.zip</code> - lambda deployment file</p>
</li>
<li>
<p><code>sam.jvm.yaml</code> - sam cli deployment script</p>
</li>
<li>
<p><code>sam.native.yaml</code> - sam cli deployment script for native</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="simulate-amazon-lambda-deployment"><a class="anchor" href="#simulate-amazon-lambda-deployment"></a>Simulate Amazon Lambda Deployment</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The AWS SAM CLI allows you to run your lambda&#8217;s locally on your laptop in a simulated Lambda environment.  This requires docker to be installed (see their install docs).
After you have built your maven project, execute this command</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">sam local start-api --template target/sam.jvm.yaml</code></pre>
</div>
</div>
<div class="paragraph">
<p>This will start a docker container that mimics Amazon&#8217;s Lambda&#8217;s deployment environment.  Once the environment
is started you can invoke the example lambda in your browser by going to</p>
</div>
<div class="paragraph">
<p><a href="http://127.0.0.1:3000/hello" class="bare">http://127.0.0.1:3000/hello</a></p>
</div>
<div class="paragraph">
<p>In the console you&#8217;ll see startup messages from the lambda.  This particular deployment starts a JVM and loads your
lambda as pure Java.</p>
</div>
<div class="paragraph">
<p>If you want to deploy a native executable of your lambda, use a different yaml template that is provided in your
generated project:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">sam local start-api --template target/sam.native.yaml</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="deploy-to-aws"><a class="anchor" href="#deploy-to-aws"></a>Deploy to AWS</h2>
<div class="sectionbody">
<div class="paragraph">
<p>There are a few steps to get your lambda running on AWS.</p>
</div>
<div class="sect2">
<h3 id="package-your-deployment"><a class="anchor" href="#package-your-deployment"></a>Package your deployment.</h3>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">sam package --template-file target/sam.jvm.yaml --output-template-file packaged.yaml --s3-bucket &lt;YOUR_S3_BUCKET&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>Type the simple name of your S3 bucket you created during.  If you&#8217;ve built a native executable, replace
<code>sam.jvm.yaml</code> with <code>sam.native.yaml</code>.</p>
</div>
</div>
<div class="sect2">
<h3 id="deploy-your-package"><a class="anchor" href="#deploy-your-package"></a>Deploy your package</h3>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">sam deploy --template-file packaged.yaml --capabilities CAPABILITY_IAM --stack-name &lt;YOUR_STACK_NAME&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>The stack name can be anything you want.</p>
</div>
</div>
<div class="sect2">
<h3 id="debugging-aws-deployment-problems"><a class="anchor" href="#debugging-aws-deployment-problems"></a>Debugging AWS Deployment Problems</h3>
<div class="paragraph">
<p>If <code>sam deploy</code>, run the <code>describe-stack-events</code> command
to get information about your deployment and what happened.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">aws cloudformation describe-stack-events --stack-name &lt;YOUR_STACK_NAME&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>One common issue that you may run across is that your S3 bucket has to be in the same region as Amazon Lambda.
Look for this error from <code>describe-stack-events</code> output:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">Error occurred while GetObject. S3 Error Code: AuthorizationHeaderMalformed. S3 Error Message:
The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'us-east-2'
(Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException;
Request ID: aefcf978-ad2a-4b53-9ffe-cea3fcd0f868)</code></pre>
</div>
</div>
<div class="paragraph">
<p>The above error is stating that my S3 bucket should be in <code>us-east-2</code>, not <code>us-east-1</code>.
To fix this error you&#8217;ll need to create an S3 bucket in that region and redo steps 1 and 2 from above.</p>
</div>
<div class="paragraph">
<p>Another annoying this is that if there is an error in deployment, you also have to completely delete
it before trying to deploy again:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">aws cloudformation delete-stack --stack-name &lt;YOUR_STACK_NAME&gt;</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="execute-your-rest-lambda-on-aws"><a class="anchor" href="#execute-your-rest-lambda-on-aws"></a>Execute your REST Lambda on AWS</h2>
<div class="sectionbody">
<div class="paragraph">
<p>To get the root URL for your service, type the following command and see the following output:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">aws cloudformation describe-stacks --stack-name &lt;YOUR_STACK_NAME&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>It should give you something like the following output:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">{
    "Stacks": [
        {
            "StackId": "arn:aws:cloudformation:us-east-1:502833056128:stack/QuarkusNativeRestExample2/b35b0200-f685-11e9-aaa0-0e8cd4caae34",
            "DriftInformation": {
                "StackDriftStatus": "NOT_CHECKED"
            },
            "Description": "AWS Serverless Quarkus HTTP - io.demo::rest-example",
            "Tags": [],
            "Outputs": [
                {
                    "Description": "URL for application",
                    "ExportName": "RestExampleNativeApi",
                    "OutputKey": "RestExampleNativeApi",
                    "OutputValue": "https://234234234.execute-api.us-east-1.amazonaws.com/Prod/"
                }
            ],</code></pre>
</div>
</div>
<div class="paragraph">
<p>The <code>OutputValue</code> attribute is the root URL for your lambda. Copy it to your browser and add <code>hello</code> at the end.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
Responses for binary types will be automatically encoded with base64.  This is different than the behavior using
<code>quarkus:dev</code> which will return the raw bytes.  Amazon&#8217;s API has additional restrictions requiring the base64 encoding.
In general, client code will automatically handle this encoding but in certain custom situations, you should be aware
you may need to manually manage that encoding.
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="examine-the-pom"><a class="anchor" href="#examine-the-pom"></a>Examine the POM</h2>
<div class="sectionbody">
<div class="paragraph">
<p>There is nothing special about the POM other than the inclusion of the <code>quarkus-amazon-lambda-http</code> extension
as a dependencies.  The extension automatically generates everything you might need for your lambda deployment.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
In previous versions of this extension you had to set up your pom or gradle
to zip up your executable for native deployments, but this is not the case anymore.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Also, at least in the generated maven archetype <code>pom.xml</code>, the <code>quarkus-resteasy</code>, <code>quarkus-vertx-web</code>, and <code>quarkus-underdow</code>
dependencies are all optional.  Pick which http framework(s) you want to use (JAX-RS, Vertx Web, and/or Servlet) and
remove the other dependencies to shrink your deployment.</p>
</div>
<div class="sect2">
<h3 id="examine-sam-yaml"><a class="anchor" href="#examine-sam-yaml"></a>Examine sam.yaml</h3>
<div class="paragraph">
<p>The <code>sam.yaml</code> syntax is beyond the scope of this document.  There&#8217;s a couple of things to note though that are particular
to the <code>quarkus-amazon-lambda-http</code> extension.</p>
</div>
<div class="paragraph">
<p>Amazon&#8217;s API Gateway assumes that HTTP response bodies are text unless you explicitly tell it which media types are
binary through configuration.  To make things easier, the Quarkus extension forces a binary (base 64) encoding of all
HTTP response messages and the <code>sam.yaml</code> file must configure the API Gateway to assume all media types are binary:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">  Globals:
    Api:
      EndpointConfiguration: REGIONAL
      BinaryMediaTypes:
        - "*/*"</code></pre>
</div>
</div>
<div class="paragraph">
<p>Another thing to note is that for pure Java lambda deployments, do not change the Lambda handler name.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">     Properties:
        Handler: io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler::handleRequest
        Runtime: java8</code></pre>
</div>
</div>
<div class="paragraph">
<p>This particular handler handles all the intricacies of integrating with the Quarkus runtime.  So you must use that
handler.</p>
</div>
<div class="paragraph">
<p>Finally, there&#8217;s an environment variable that must be set for native GraalVM deployments.  If you look at <code>sam.native.yaml</code>
you&#8217;ll see this:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">        Environment:
          Variables:
            DISABLE_SIGNAL_HANDLERS: true</code></pre>
</div>
</div>
<div class="paragraph">
<p>This environment variable resolves some incompatibilities between Quarkus and the Amazon Lambda Custom Runtime environment.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="tracing-with-aws-xray-and-graalvm"><a class="anchor" href="#tracing-with-aws-xray-and-graalvm"></a>Tracing with AWS XRay and GraalVM</h2>
<div class="sectionbody">
<div class="paragraph">
<p>If you are building native images, and want to use <a href="https://aws.amazon.com/xray">AWS X-Ray Tracing</a> with your lambda
you will need to include <code>quarkus-amazon-lambda-xray</code> as a dependency in your pom.  The AWS X-Ray
library is not fully compatible with GraalVM so we had to do some integration work to make this work.</p>
</div>
</div>
</div>
    </div>
  </div>
</div>

  </div>

  <div class="content project-footer">
  <div class="footer-section">
    <div class="logo-wrapper">
      <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_reverse.svg" class="project-logo" title="Quarkus"></a>
    </div>
  </div>
  <div class="grid-wrapper">
    <p class="grid__item width-3-12">Quarkus is open. All dependencies of this project are available under the <a href='https://www.apache.org/licenses/LICENSE-2.0' target='_blank'>Apache Software License 2.0</a> or compatible license.<br /><br />This website was built with <a href='https://jekyllrb.com/' target='_blank'>Jekyll</a>, is hosted on <a href='https://pages.github.com/' target='_blank'>Github Pages</a> and is completely open source. If you want to make it better, <a href='https://github.com/quarkusio/quarkusio.github.io' target='_blank'>fork the website</a> and show us what you’ve got.</p>

    
      <div class="width-1-12 project-links">
        <span>Navigation</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="/">Home</a></li>
          
            <li><a href="/guides">Guides</a></li>
          
            <li><a href="/community/#contributing">Contribute</a></li>
          
            <li><a href="/faq">FAQ</a></li>
          
            <li><a href="/get-started">Get Started</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Contribute</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://twitter.com/quarkusio">Follow us</a></li>
          
            <li><a href="https://github.com/quarkusio">GitHub</a></li>
          
            <li><a href="/security">Security&nbsp;policy</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Get Help</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://groups.google.com/forum/#!forum/quarkus-dev">Forums</a></li>
          
            <li><a href="https://quarkusio.zulipchat.com">Chatroom</a></li>
          
        </ul>
      </div>
    

    
      <div class="width-3-12 more-links">
        <span>Quarkus is made of community projects</span>
        <ul class="footer-links">
          
            <li><a href="https://vertx.io/" target="_blank">Eclipse Vert.x</a></li>
          
            <li><a href="https://microprofile.io" target="_blank">Eclipse MicroProfile</a></li>
          
            <li><a href="https://hibernate.org" target="_blank">Hibernate</a></li>
          
            <li><a href="https://netty.io" target="_blank">Netty</a></li>
          
            <li><a href="https://resteasy.github.io" target="_blank">RESTEasy</a></li>
          
            <li><a href="https://camel.apache.org" target="_blank">Apache Camel</a></li>
          
            <li><a href="https://code.quarkus.io/" target="_blank">And many more...</a></li>
          
        </ul>
      </div>
    
  </div>
</div>
  <div class="content redhat-footer">
  <div class="grid-wrapper">
    <span class="licence">
      <i class="fab fa-creative-commons"></i><i class="fab fa-creative-commons-by"></i> <a href="https://creativecommons.org/licenses/by/3.0/" target="_blank">CC by 3.0</a> | <a href="https://www.redhat.com/en/about/privacy-policy">Privacy Policy</a>
    </span>
    <span class="redhat">
      Sponsored by
    </span>
    <span class="redhat-logo">
      <a href="https://www.redhat.com/" target="_blank"><img src="/assets/images/redhat_reversed.svg"></a>
    </span>
  </div>
</div>


  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" integrity="sha384-8gBf6Y4YYq7Jx97PIqmTwLPin4hxIzQw5aDmUg/DDhul9fFpbbLcLh3nTIIDJKhx" crossorigin="anonymous"></script>
  <script type="text/javascript" src="/assets/javascript/mobile-nav.js"></script>
  <script type="text/javascript" src="/assets/javascript/scroll-down.js"></script>
  <script src="/assets/javascript/satellite.js" type="text/javascript"></script>
  <script src="https://quarkus.io/guides/javascript/config.js" type="text/javascript"></script>
  <script src="/assets/javascript/search-filter.js" type="text/javascript"></script>
  <script src="/assets/javascript/back-to-top.js" type="text/javascript"></script>
</body>

</html>
